2017年9月28日、第48回衆議院議員総選挙に臨み、民進党が希望の党と合流することを決定し、事実上「解党」すると、同日に逢見直人事務局長名で談話を出し、「大きなかたまりとして安倍政権に代わる選択肢を国民に示すことが重要である」とし、一連の流れを支持する姿勢を明らかにした。しかし同年10月4日、会長の神津里季生は衆院選では特定政党の支援を見送り、民進党出身者を個別に支援する意向を示した。連合内においても旧総評系労組の組織内候補の多くが立憲民主党からの出馬を選択した。2018年5月7日、民進党が希望の党と合併して国民民主党が設立されると、同盟系組合の自動車総連・電力総連・UAゼンセン、電機連合の組織内議員は国民民主党に参加。その一方で、自治労、日教組、JP労組、情報労連といった総評系組合の組織内議員は国民民主党に参加せず立憲民主党に合流し、股裂き状態となった。国民民主党の結成には、旧民進勢力の再結集を望む連合の後押しもあったが、岡田克也・安住淳ら民進党の重鎮議員も相次いで新党への不参加を表明し、神津は新党不参加者への不快感を口にした。2019年の第25回参議院議員通常選挙では、低投票率であったこともあり、連合が立憲民主、国民民主両党の議席獲得に貢献し、一定の存在感を見せた。立憲民主から候補者を擁立した5労組（自治労、日教組、JP労組、情報労連、私鉄総連）は、私鉄総連を除き得票数を1割以上減らしたが、いずれも10万票以上を獲得し、同党の著名人候補を上回った。支持率が低迷し、厳しい情勢が伝えられていた国民民主系の労組は組織固めを徹底し、UAゼンセンは過去最高得票となる26万票を獲得するなど、組織の固さを印象付ける結果となった。連合は9月26日には、静岡県選挙区で立憲・国民両党の候補者が競合したことを念頭に、「主導権争いを繰り広げた両党は、有権者から期待が集まらなかった点を猛省すべきだ」と両党を批判した参院選の総括文書を了承した。また、立憲民主党は参院選後の8月以降、国民民主党などに院内会派の合流を呼び掛け、9月30日に統一会派が結成されたが、この統一会派は党主導で進められ、連合は会派合流に向けた党首会談を報道機関からの取材で初めて知るなど、蚊帳の外に置かれた。
オブジェクト指向プログラミングの理論では、抽象化とは抽象的「アクター」であるオブジェクトを定義する機能であり、アクターは作業を行い、状態を変化させ、状態を報告し、システム内の他のオブジェクトと「通信」する。カプセル化は、状態の詳細を隠蔽することを意味する用語だが、従来のプログラミング言語でのデータ型の概念の拡張である。カプセル化はデータに強く結びついた「振る舞い」をそのデータと関連付け、他のデータ型との相互作用を標準化し、抽象化の起点となる。抽象化をさらに進めて、異なる型のオブジェクト間で同じ操作を定義することをポリモーフィズムと呼ぶ。また、逆方向に抽象化を進め、データ型やクラスの内部を抽象化してそれらの複雑な関係を単純化し構造化することを委譲または継承と呼ぶ。オブジェクト指向言語は様々あるが、似たような抽象化手法を提供している。ポリモーフィズムはほぼ全てのオブジェクト指向言語でサポートされており、類似あるいは同じ役割を持つデータ型の置換なども含まれる。それほど一般的ではないが、構成・イメージ・パッケージによってコンパイル時/リンク時/ロード時にオブジェクト間の関係を決定することがあり、この場合実行時に関係を決定する必要性がほとんどなくなる。CLOSやSelfなどの言語では、クラスとインスタンスをあまり区別せず、ポリモーフィズムの実現に委譲をよく使う。また、個々のオブジェクトや関数はより柔軟に抽象化され、LISPの機能により適するようになっている。C++では、テンプレート、演算子オーバーロード、その他のコンパイル時の静的バインディングなどが特徴であり、これらがC++固有の柔軟性に関する問題を生んでいる。同じ抽象化にも様々な戦略があるが、基本的に抽象名詞をコード内でサポートする必要性に違いはない。いずれのプログラミング言語も動詞を関数として、名詞をデータ構造として、そして両者を合わせてプロセスとして抽象化する機能に基づいている。例えば、以下のサンプルコードはJavaによる動物の抽象的表現である。ここでは、飢えと食事という観点で抽象化している。Animalクラスは動物の状態と機能を表現するよう定義されている。class Animal extends LivingThing {    Location loc;    double energyReserves;    boolean isHungry() {        if (energyReserves < 2.5) { return true; }        else { return false; }    }    void eat(Food f) {        // Consume food        energyReserves += f.getCalories();    }    void moveTo(Location l) {        // Move to new location        loc = l;    }}この定義で、Animal型のオブジェクトを生成し、以下のようにメソッドを呼び出すことができる:thePig = new Animal();theCow = new Animal();if (thePig.isHungry()) { thePig.eat(tableScraps); }if (theCow.isHungry()) { theCow.eat(grass); }theCow.moveTo(theBarn);この例では、Animalクラスが動物を抽象化したもので、LivingThing は Animal よりさらに高い抽象度の抽象化（この場合汎化）である。もっと違った抽象化も考えられる。例えば中間的な抽象化として、毎日ミルクを生み出してくれる動物と、最後に肉となってくれるだけの動物とに分類することができる。DailyAnimal （雌牛や山羊）はミルクを生み出すのに適した餌を与えられ、Animal （豚や雄牛）は肉の質を高める餌を与えられる。このような抽象化をすれば、アプリケーションを書く人は餌の種類を指定する必要がなくなり、給餌スケジュールに集中することができるようになる。この2つのクラスは継承関係であっても、全く独立していてもよく、それによってポリモーフィズムの度合いも変わってくる。このような機能は言語によって大きく違うが、大体においてある言語でできることは他の言語でも可能である。演算子オーバーロードや抽象データ型を多用することで、継承や他のポリモーフィズムを実現する手法と同様の効果が得られる。クラスを使った記法は単にコードを書くものの利便性のために存在するに過ぎない。